iT邦幫忙

2026 iThome 鐵人賽

0
JavaScript

30天從零打造醫療資訊小系統系列 第 15 篇

Day 18|讓 Java 新增病患資料:第一次使用 INSERT INTO

  • 分享至 

  • xImage
  •  

、從讀取資料,進階到新增資料

昨天,我們成功使用 JDBC 查詢 MySQL 裡的病患資料。

但是一個基本的醫療資訊系統,不能只有查看資料的功能,也需要讓使用者新增病患紀錄。

例如,當櫃檯人員登記一位新病患時,系統就需要將姓名、性別、生日和電話寫進資料庫。

今天我們的目標是:

使用 Java、JDBC 和 SQL,新增一筆病患資料。

二、先認識 INSERT INTO

在 MySQL 中,新增資料常常會使用 INSERT INTO。

例如:

INSERT INTO patient (name, gender, birthday, phone)
VALUES ('小明', '男', '2006-01-21', '0912345678');

這段 SQL 的意思是,將一筆新紀錄新增到 patient 資料表。

因為之前建立資料表時,id 使用了 AUTO_INCREMENT,所以 MySQL 會自動產生新的編號,不需要我們手動輸入。

可以在 MySQL 執行:

SELECT * FROM patient;

確認新增的資料是否存在。

三、在 Java 中使用 PreparedStatement

接著,我們把新增資料的工作交給 Java。

建立一個 TestPatientInsert.java:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import util.DBConnection;
public class TestPatientInsert {
public static void main(String[] args) {
String sql = "INSERT INTO patient "
+ "(name, gender, birthday, phone) "
+ "VALUES (?, ?, ?, ?)";
try (
Connection conn = DBConnection.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)
) {
ps.setString(1, "小明");
ps.setString(2, "男");
ps.setDate(
3,
java.sql.Date.valueOf("2006-01-21")
);
ps.setString(4, "0912345678");
int rows = ps.executeUpdate();
System.out.println("成功新增筆數:" + rows);
} catch (SQLException e) {
e.printStackTrace();
}
}
}

執行後,如果新增成功,通常會看到:

成功新增筆數:1

這代表資料庫回報有一筆資料受到這次操作影響。

四、看懂程式的關鍵部分

  1. 使用問號作為參數

String sql = "INSERT INTO patient "
+ "(name, gender, birthday, phone) "
+ "VALUES (?, ?, ?, ?)";

這裡有四個問號,分別對應姓名、性別、生日和電話。

使用參數的好處是,不必自己處理每一個值的引號和格式,也能避免直接串接輸入內容所造成的 SQL Injection 風險。

  1. 設定每個參數

ps.setString(1, "小明");
ps.setString(2, "男");
ps.setDate(3, java.sql.Date.valueOf("2006-01-21"));
ps.setString(4, "0912345678");

參數的位置從 1 開始,不是從 0 開始。

程式 對應欄位
setString(1, ...) name
setString(2, ...) gender
setDate(3, ...) birthday
setString(4, ...) phone

電話雖然看起來像數字,但通常應以字串處理,因為電話可能有開頭的 0、國碼或其他符號。

  1. 執行新增操作

int rows = ps.executeUpdate();

executeUpdate() 常用於 INSERT、UPDATE 和 DELETE 等會改變資料的 SQL,回傳受影響的資料筆數。

它和昨天使用的 executeQuery() 不一樣:

  • executeQuery():取得查詢結果。
  • executeUpdate():執行新增、修改或刪除等操作。

五、怎麼確認資料真的新增了?

Java 顯示成功訊息後,我們還是可以回到 MySQL 執行:

SELECT id, name, gender, birthday, phone
FROM patient;

如果結果出現新的紀錄,就代表新增操作確實寫入了資料庫。

這裡也要提醒:測試程式每執行一次,就可能新增一筆重複的資料。正式系統應根據需求設計資料驗證,避免重複登記。

六、把新增功能放進真正的系統之前

今天使用的是 main() 方法測試 JDBC,還不是完整的網頁功能。

未來真正的操作流程會更接近:

使用者填寫病患表單
↓
HTML 表單送出
↓
Servlet 接收資料
↓
PreparedStatement 執行 INSERT
↓
MySQL 儲存資料
↓
網頁顯示新增結果

此外,實際的醫療系統還需要處理必填欄位、日期格式、電話格式、使用者權限和操作紀錄。測試資料也不能直接換成未經授權的真實病患資料。

今日小結

今天我們學會使用 INSERT INTO 和 PreparedStatement,將資料新增到 MySQL。

這篇最重要的三個觀念是:

  1. INSERT INTO 負責新增資料。
  2. setString()、setDate() 等方法用來設定 SQL 參數。
  3. executeUpdate() 可以執行新增操作並回傳受影響的資料筆數。

Day 18 完成!

下一篇,我們要把查詢結果整理成病患清單,讓系統不只會存取資料,也開始具備基本的資料展示功能。

參考資料:MySQL Connector/J 官方文件


上一篇
Day 17|第一次使用 JDBC 查詢病患資料:讓 Java 讀取 MySQL
下一篇
Day 19|把病患資料整理成清單:從 JDBC 到 JSP
系列文
30天從零打造醫療資訊小系統 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言